package map_util

import "errors"

func GetInt(m map[string]interface{}, key string) (int, error) {
	v, o := m[key]
	if o {
		v, o := v.(int)
		if o {
			return v, nil
		}
		return 0, errors.New("value不是int类型")
	}
	return 0, errors.New("key不存在:" + key)
}

func GetFloat(m map[string]interface{}, key string) (float64, error) {
	v, o := m[key]
	if o {
		v, o := v.(float64)
		if o {
			return v, nil
		}
		return 0, errors.New("value不是float64类型")
	}
	return 0, errors.New("key不存在:" + key)
}

func GetString(m map[string]interface{}, key string) (string, error) {
	v, o := m[key]
	if o {
		v, o := v.(string)
		if o {
			return v, nil
		}
		return "", errors.New("value不是string类型")
	}
	return "", errors.New("key不存在:" + key)
}

func GetObject(m map[string]interface{}, key string) (map[string]interface{}, error) {
	v, o := m[key]
	if o {
		v, o := v.(map[string]interface{})
		if o {
			return v, nil
		}
		return nil, errors.New("value不是object类型")
	}
	return nil, errors.New("key不存在:" + key)
}

func GetArray(m map[string]interface{}, key string) ([]interface{}, error) {
	v, o := m[key]
	if o {
		v, o := v.([]interface{})
		if o {
			return v, nil
		}
		return nil, errors.New("value不是array类型")
	}
	return nil, errors.New("key不存在:" + key)
}
